<?php

// https://www.runoob.com/mongodb/php7-mongdb-tutorial.html

// 连接mongodb服务器
function write()
{
    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
    $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);

    // 插入数据
    $bulk = new MongoDB\Driver\BulkWrite;
    $document = ['_id' => new MongoDB\BSON\ObjectID, 'name' => '菜鸟教程'];

    // 产生文档id
    $_id = $bulk->insert($document);
    // var_dump($_id);

    $result = $manager->executeBulkWrite('test.runoob', $bulk, $writeConcern);
    var_dump($result);
}

// 读取数据
// 里我们将三个网址数据插入到 test 数据库的 sites 集合，并读取迭代出来
function read()
{
    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

    // 插入数据
    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->insert(['x' => 1, 'name' => '菜鸟教程', 'url' => 'http://www.runoob.com']);
    $bulk->insert(['x' => 2, 'name' => 'Google', 'url' => 'http://www.google.com']);
    $bulk->insert(['x' => 3, 'name' => 'taobao', 'url' => 'http://www.taobao.com']);
    $manager->executeBulkWrite('test.sites', $bulk);

    // 过滤条件
    $filter = ['x' => ['$gt' => 1]];
    $options = [
        'projection' => ['_id' => 0],
        'sort' => ['x' => -1],
    ];

    // 查询数据
    $query = new MongoDB\Driver\Query($filter, $options);
    $cursor = $manager->executeQuery('test.sites', $query);

    foreach ($cursor as $document) {
        print_r($document);
    }
}

// 更新数据
// 接下来我们将更新 test 数据库 sites 集合中 x 为 2 的数据：
function update()
{
    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->update(
        ['x' => 2],
        ['$set' => ['name' => '菜鸟工具', 'url' => 'tool.runoob.com']],
        ['multi' => false, 'upsert' => false]
    );

    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
    $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
    $result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);
    var_dump($result);
}

// 删除数据
// 以下实例删除了 x 为 1 和 x 为 2的数据，注意 limit 参数的区别：
function delete()
{
    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->delete(['x' => 1], ['limit' => 1]);   // limit 为 1 时，删除第一条匹配数据
    $bulk->delete(['x' => 2], ['limit' => 0]);   // limit 为 0 时，删除所有匹配数据

    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
    $writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
    $result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);
    var_dump($result);
}

// write();
// read();
// update();
// delete();